package cn.iocoder.yudao.framework.datapermission.v1;

import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule;

/**
 * 数据权限规则接口
 *
 * @author 山野羡民（1032694760@qq.com）
 */
public interface UniDataPermissionRule extends DataPermissionRule {

    /**
     * 添加数据权限过滤的数据编号列
     *
     * @param entityClass 实体类，如 SystemUserDO
     * @param columnName  列名，如 system_users 表的 dept_id
     * @param columnScopeAlias 列别名，用于指定的数据编号不同于列名的情况，如 system_dept 表的 id 对应的数据编号别名为 dept_id
     */
    void addDataColumn(Class<?> entityClass, String columnName, String columnScopeAlias);

    /**
     * 添加数据权限过滤的数据编号列
     *
     * @param entityClass 实体类，如 SystemUserDO
     * @param columnName  列名，如 system_users 表的 dept_id
     */
    default void addDataColumn(Class<?> entityClass, String columnName) {
        addDataColumn(entityClass, columnName, columnName);
    }

    /**
     * 添加数据权限过滤的数据编号列
     *
     * @param tableName   表名，如 system_users
     * @param columnName  列名，如 system_users 表的 dept_id
     * @param columnAlias 列别名，用于指定的数据编号不同于列名的情况，如 system_dept 表的 id 对应的数据编号别名为 dept_id
     */
    void addDataColumn(String tableName, String columnName, String columnAlias);

    /**
     * 添加数据权限过滤的数据编号列
     *
     * @param tableName  表名，如 system_users
     * @param columnName 列名，如 system_users 表的 dept_id
     */
    default void addDataColumn(String tableName, String columnName) {
        addDataColumn(tableName, columnName, columnName);
    }

    /**
     * 添加数据权限过滤的用户编号列
     *
     * @param entityClass 实体类，如 AdminRoleDO
     * @param columnName  列名，如 system_user_role 表的 user_id
     */
    void addUserColumn(Class<?> entityClass, String columnName);

    /**
     * 添加数据权限过滤的用户编号列
     *
     * @param tableName  表名，如 system_user_role
     * @param columnName 列名，如 system_user_role 表的 user_id
     */
    void addUserColumn(String tableName, String columnName);

}
